import { createRouter, createWebHistory } from 'vue-router';
import type { RouteRecordRaw, Router } from 'vue-router';
import Home from '@/views/Home.vue';
import { getToken } from '@/utils/cookies';

/**
 * 从 Cookie 中获取 token
 */
function getTokenFromCookie(): string | null {
  const cookies = document.cookie.split(';');
  for (const cookie of cookies) {
    const [name, value] = cookie.trim().split('=');
    if (name === 'token') {
      return decodeURIComponent(value);
    }
  }
  return null;
}

// 默认路由列表
export const defaultRouterList: RouteRecordRaw[] = [
  {
    path: '/',
    name: 'Home',
    component: Home
  },
  {
    path: '/home',
    name: 'HomeRedirect',
    redirect: '/'
  },
  // 登录应用路由 - 需要提供微应用容器
  {
    path: '/login',
    name: 'Login',
    component: Home,
    children: [
      {
        path: ':pathMatch(.*)*',
        component: Home
      }
    ]
  },
  // 系统管理应用路由
  {
    path: '/system',
    name: 'System',
    component: Home,
    children: [
      {
        path: ':pathMatch(.*)*',
        component: Home
      }
    ]
  },
  // 租户管理应用路由
  {
    path: '/tenant',
    name: 'Tenant',
    component: Home,
    children: [
      {
        path: ':pathMatch(.*)*',
        component: Home
      }
    ]
  }
];

// 🔑 路由守卫逻辑（可复用）
const setupAuthGuard = (router: Router) => {
  router.beforeEach((to, _from, next) => {
    // 🔧 优先从 Cookie 获取 token，失败则尝试从 URL hash 获取（备用方案）
    let tokenFromExternal: string | null = null;
    
    // 方案1: 从 Cookie 中获取（优先）
    const cookieToken = getTokenFromCookie();
    if (cookieToken) {
      console.log('[Router Guard] 🍪 从 Cookie 中获取到 token');
      tokenFromExternal = cookieToken;
    }
    
    // 方案2: 从 URL hash 中获取（备用，如果 Cookie 被拒绝）
    if (!tokenFromExternal && window.location.hash && window.location.hash.includes('token=')) {
      const hashParams = new URLSearchParams(window.location.hash.substring(1));
      const hashToken = hashParams.get('token');
      
      if (hashToken) {
        console.log('[Router Guard] 🔑 从 URL hash 中获取到 token（Cookie 不可用）');
        tokenFromExternal = hashToken;
        
        // 清除 URL 中的 token（安全考虑）
        window.location.hash = '';
        console.log('[Router Guard] 🧹 已清除 URL hash 中的 token');
      }
    }
    
    // 如果从外部获取到 token，同步到 localStorage
    if (tokenFromExternal && !localStorage.getItem('token')) {
      console.log('[Router Guard] 💾 正在同步 token 到 localStorage...');
      localStorage.setItem('token', tokenFromExternal);
      console.log('[Router Guard] ✅ Token 已同步到 localStorage');
    }
    
    // 🔧 特殊处理：访问 /login 路由时，直接重定向到独立登录应用
    if (to.path === '/login' || to.path.startsWith('/login/')) {
      console.log('[Router Guard] 访问 /login 路由，重定向到独立登录应用');
      
      const loginAppUrl = import.meta.env.VITE_APP_LOGIN_APP_URL 
        || import.meta.env.VITE_LOGIN_APP_URL 
        || 'http://localhost:3003';
      
      // 获取 redirect 参数（如果有的话）
      const redirectParam = to.query.redirect as string;
      let redirectUrl = loginAppUrl;
      
      if (redirectParam) {
        // 如果 redirect 参数是完整 URL，直接使用
        if (redirectParam.startsWith('http://') || redirectParam.startsWith('https://')) {
          redirectUrl = `${loginAppUrl}?redirect=${encodeURIComponent(redirectParam)}`;
        } else {
          // 如果是相对路径，转换为完整 URL
          const fullUrl = window.location.origin + (redirectParam.startsWith('/') ? redirectParam : '/' + redirectParam);
          redirectUrl = `${loginAppUrl}?redirect=${encodeURIComponent(fullUrl)}`;
        }
      }
      
      console.log('[Router Guard] 跳转到:', redirectUrl);
      window.location.href = redirectUrl;
      return false;
    }
    
    // 🔧 优先从 localStorage 读取，如果没有则从 cookies 读取
    let token: string | null = localStorage.getItem('token');
    if (!token) {
      const cookieToken = getToken();
      if (cookieToken) {
        token = cookieToken;
        localStorage.setItem('token', token);
        console.log('[Router Guard] ✅ Token 从 cookies 同步到 localStorage');
      }
    }
    
    if (!token) {
      // 未登录，跳转到独立的登录应用
      console.log('[Router Guard] 未登录，跳转到独立登录应用');
      console.log('[Router Guard] 当前路径:', to.fullPath);
      
      // 🔑 关键：跳转到独立的登录应用URL，而不是主应用内的路由
      const loginAppUrl = import.meta.env.VITE_APP_LOGIN_APP_URL 
        || import.meta.env.VITE_LOGIN_APP_URL 
        || 'http://localhost:3003';
      
      // 保存当前路径作为 redirect 参数，登录成功后跳回
      const currentUrl = window.location.origin + to.fullPath;
      const redirectUrl = `${loginAppUrl}?redirect=${encodeURIComponent(currentUrl)}`;
      
      console.log('[Router Guard] 跳转到:', redirectUrl);
      
      // 使用 window.location.href 跳转到独立应用
      window.location.href = redirectUrl;
      
      // 阻止路由继续导航
      return false;
    } else {
      // 已登录，放行
      next();
    }
  });
};

// 创建路由实例（用于旧的导入方式，保持兼容性）
const router = createRouter({
  history: createWebHistory(),
  routes: defaultRouterList
});

// 注册认证守卫
setupAuthGuard(router);

// 🆕 导出 setupAuthGuard 函数供 main.ts 使用
export { setupAuthGuard };

export default router;